#pragma once
/*
日志消息类:
    1.日志输出时间
    2.日志等级
    3.源文件名称
    4.源代码行号
    5.线程ID
    6.日志主体消息
    7.日志器名称
*/

#include <iostream>
#include <thread>
#include "level.hpp"
#include "util.hpp"
using namespace std;

namespace hsl_log
{
    struct LogMsg
    {
        using ptr = std::shared_ptr<LogMsg>;
        size_t _line;           // 行号
        size_t _ctime;          // 时间
        std::thread::id _tid;   // 线程ID
        std::string _name;      // 日志器名称
        std::string _file;      // 文件名
        std::string _payload;   // 日志消息
        LogLevel::value _level; // 日志等级
        LogMsg(std::string &name, std::string file, size_t line, std::string &&payload,
               LogLevel::value level) : _name(name), _file(file), _payload(std::move(payload)), _level(level),
                                        _line(line), _ctime(util::date::now()), _tid(std::this_thread::get_id())
        {
            // std::cout << "构造msg\n";
        }
        //~LogMsg() { /*std::cout << "析构msg\n";*/}
    };
}


// namespace hsl_log
// {
//     struct LogMsg
//     {
//         size_t _ctime;
//         LogLevel::value _level;
//         string _file;
//         size_t _line;
//         thread::id _tid;
//         string _payload; // 主体消息：有效载荷
//         string _logger;

//         LogMsg(LogLevel::value level,
//                size_t line,
//                const string file,
//                const string logger,
//                const string msg)
//             : _ctime(util::date::now()),
//               _level(level),
//               _file(file),
//               _line(line),
//               _logger(logger),
//               _payload(msg),
//               _tid(this_thread::get_id())
//         {
//         }
//     };

// };
